package com.itheima.proxy.decoratorProxy;

import com.itheima.proxy.Jdk.Car;
import com.itheima.proxy.Jdk.Tesla;

/**
 * @author by itheima
 * @Date 2022/4/23
 * @Description
 * 弊端：
 *   1.任意实现公共代理接口的类都可以被装饰类增强，比继承稍微好了一点；
 *   2.代码存在大量冗余
 *   3.有多少个需要增强的方法，就需要写多少次，维护性差
 */
public class DecoratorProxy implements Car {
    /**
     * 目标对象：被代理的对象
     */
    private Car car;

    /**
     * 通过构造器传入目标对象
     * @param car
     */
    public DecoratorProxy(Car car) {
        this.car = car;
    }

    @Override
    public void color() {
        //打印开始时间
        long startTime = System.currentTimeMillis();
        System.out.println("开始时间："+startTime);
        car.color();
        long endTime = System.currentTimeMillis();
        System.out.println("结束时间："+endTime);
    }

    @Override
    public void run() {
        //打印开始时间
        long startTime = System.currentTimeMillis();
        System.out.println("开始时间："+startTime);
        car.run();
        long endTime = System.currentTimeMillis();
        System.out.println("结束时间："+endTime);
    }

    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
        new DecoratorProxy(new Tesla()).run();
    }
}
